package simplefactory;

/**
 * questions:
 *  1. 简单工厂模式和工厂模式有什么区别 ?
 *      简单工厂模式最常用，就是一个工厂创建继承同一父类的类;
 *      工厂模式，一个工厂只生产一种类;(不理解究竟哪里有这种模式的应用场景)
 *
 *  2. 特点是什么 ?
 *      一个工厂创建继承同一父类的多种类;
 *
 *  3. 优缺点都有什么 ?
 *  优点
 *      - 将创建、使用工作分开，不必关心类对象如何创建，实现了解耦
 *      - 把初始化实例时的工作放到工厂里进行，使代码更容易维护。更符合面向对象的原则&面向接口编程，而不是面向实现编程
 *
 *  缺点
 *      - 工厂类集中了所有实例（产品）的创建逻辑，一旦这个工厂不能正常工作，整个系统都会受到影响
 *      - 违背 "开放-关闭" 原则，一旦添加新产品就不得不修改工厂类的逻辑，这样就会造成工厂逻辑过于复杂
 *      - 简单工厂模式由于使用了静态工厂方法，静态方法不能被继承和重写，会造成工厂角色无法形成
 */

public class SimpleFactory {

    public static Operation getOperation(String operate) {
        Operation oper = null;
        switch (operate) {
            case "+":
                oper = new OpreationAdd();
                break;

            case "-":
                oper = new OpreationSub();
                break;

            case "*":
                oper = new OpreationMul();
                break;

            case "/":
                oper = new OpreationDiv();
                break;

            default:
                throw new IllegalStateException("Unexpected value: " + operate);
        }
        return oper;
    }
}